.\"
.\"	$OpenBSD: SSL_CTX_add_session.3,v 1.2 2014/12/02 14:11:01 jmc Exp $
.\"
.Dd $Mdocdate: December 2 2014 $
.Dt SSL_CTX_ADD_SESSION 3
.Os
.Sh NAME
.Nm SSL_CTX_add_session ,
.Nm SSL_add_session ,
.Nm SSL_CTX_remove_session ,
.Nm SSL_remove_session
.Nd manipulate session cache
.Sh SYNOPSIS
.In openssl/ssl.h
.Ft int
.Fn SSL_CTX_add_session "SSL_CTX *ctx" "SSL_SESSION *c"
.Ft int
.Fn SSL_add_session "SSL_CTX *ctx" "SSL_SESSION *c"
.Ft int
.Fn SSL_CTX_remove_session "SSL_CTX *ctx" "SSL_SESSION *c"
.Ft int
.Fn SSL_remove_session "SSL_CTX *ctx" "SSL_SESSION *c"
.Sh DESCRIPTION
.Fn SSL_CTX_add_session
adds the session
.Fa c
to the context
.Fa ctx .
The reference count for session
.Fa c
is incremented by 1.
If a session with the same session id already exists,
the old session is removed by calling
.Xr SSL_SESSION_free 3 .
.Pp
.Fn SSL_CTX_remove_session
removes the session
.Fa c
from the context
.Fa ctx .
.Xr SSL_SESSION_free 3
is called once for
.Fa c .
.Pp
.Fn SSL_add_session
and
.Fn SSL_remove_session
are synonyms for their
.Fn SSL_CTX_*
counterparts.
.Sh NOTES
When adding a new session to the internal session cache, it is examined
whether a session with the same session id already exists.
In this case it is assumed that both sessions are identical.
If the same session is stored in a different
.Vt SSL_SESSION
object, the old session is removed and replaced by the new session.
If the session is actually identical (the
.Vt SSL_SESSION
object is identical),
.Fn SSL_CTX_add_session
is a no-op, and the return value is 0.
.Pp
If a server
.Vt SSL_CTX
is configured with the
.Dv SSL_SESS_CACHE_NO_INTERNAL_STORE
flag then the internal cache will not be populated automatically by new
sessions negotiated by the SSL/TLS implementation, even though the internal
cache will be searched automatically for session-resume requests (the
latter can be suppressed by
.Dv SSL_SESS_CACHE_NO_INTERNAL_LOOKUP ) .
So the application can use
.Fn SSL_CTX_add_session
directly to have full control over the sessions that can be resumed if desired.
.Sh RETURN VALUES
The following values are returned by all functions:
.Bl -tag -width Ds
.It 0
The operation failed.
In case of the add operation, it was tried to add the same (identical) session
twice.
In case of the remove operation, the session was not found in the cache.
.It 1
The operation succeeded.
.El
.Sh SEE ALSO
.Xr ssl 3 ,
.Xr SSL_CTX_set_session_cache_mode 3 ,
.Xr SSL_SESSION_free 3
